package cn.b.sky.mes.pp.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import cn.b.sky.mes.pp.model.ProductionControl;
import cn.b.sky.mes.pp.model.ProductionOperation;
import cn.b.sky.mes.pp.model.condition.ProductionControlCondition;
import cn.b.sky.mes.pp.model.condition.ProductionControlStatesCondition;
import org.apache.ibatis.annotations.Param;

/**
 * 
 * <strong>Title : ProductionControlDao.java<br></strong>
 * <strong>Package : cn.b.sky.mes.pp.dao<br></strong>
 * <strong>Description : </strong>生产管理号数据接口<br> 
 * <strong>Create on : 2016年5月13日 上午10:36:54<br></strong>
 * <p>
 * @author zhaoxin01<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface ProductionControlDao {

  /**
   * 
   * <strong>Title : selectProductionControlByCondition<br></strong>
   * <strong>Description : </strong>分页查询生产管理号<br> 
   * <strong>Create on : 2016年5月13日 上午11:11:50<br></strong>
   * <p>
   * @param productionControlCondition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlByCondition(ProductionControlCondition productionControlCondition);

  /**
   * 
   * <strong>Title : selectProductionControlCount<br></strong>
   * <strong>Description : </strong>查询生产管理号数量<br> 
   * <strong>Create on : 2016年5月13日 上午11:12:42<br></strong>
   * <p>
   * @param productionControlCondition
   * @return
   * int
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectProductionControlCount(ProductionControlCondition productionControlCondition);

  /**
   * 
   * <strong>Title : selectProductionControl<br></strong>
   * <strong>Description : </strong>查询生产管理号<br> 
   * <strong>Create on : 2016年5月13日 上午11:14:33<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * @return
   * ProductionControl
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionControl selectProductionControl(@Param("siteCode") String siteCode,
      @Param("productionControlNum") String productionControlNum);

  /**
   * 
   * <strong>Title : selectProductionControlByOrder<br></strong>
   * <strong>Description : </strong>根据生产订单查询sfc订单<br> 
   * <strong>Create on : 2016-5-16 下午6:18:57<br></strong>
   * <p>
   * @param siteCode 工厂代码
   * @param productionOrderNum 生产订单
   * @return
   * ProductionControl
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlByOrder(@Param("siteCode") String siteCode,
      @Param("productionOrderNum") String productionOrderNum);


  /**
   *
   * <strong>Title : selectProductionControlCompletedQuantity<br></strong>
   * <strong>Description : </strong>查询生产管理号完工、报废数量<br>
   * <strong>Create on : 2016年5月19日 上午9:59:16<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * @return
   * ProductionControl
   * @throws
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionControl selectProductionControlCompletedQuantity(@Param("siteCode") String siteCode,
                                                             @Param("productionControlNum") String productionControlNum);

  /**
   *
   * <strong>Title : selectProductionControlListByWorkCenter<br></strong>
   * <strong>Description : </strong>查询工作中心下可确认生产管理号列表<br>
   * <strong>Create on : 2016年5月19日 下午1:22:43<br></strong>
   * <p>
   * @param productionControl
   * @return
   * List<ProductionControl>
   * @throws
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlListByWorkCenter(ProductionControl productionControl);
  /**
   * 
   * <strong>Title : updateProductionControl<br></strong>
   * <strong>Description : </strong>更新生产管理号<br> 
   * <strong>Create on : 2016年5月13日 下午1:05:11<br></strong>
   * <p>
   * @param productionControl
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateProductionControl(ProductionControl productionControl);

  /**
   * 
   * <strong>Title : deleteProductionControl<br></strong>
   * <strong>Description : </strong> 删除生产管理号<br> 
   * <strong>Create on : 2016年5月13日 下午1:08:57<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteProductionControl(@Param("siteCode") String siteCode,
      @Param("productionControlNum") String productionControlNum);

  /**
   * 
   * <strong>Title : deleteProductionControlByOrder<br></strong>
   * <strong>Description : </strong>删除生产订单下的sfc<br> 
   * <strong>Create on : 2016-5-16 下午6:15:07<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteProductionControlByOrder(@Param(value = "siteCode") String siteCode,
      @Param(value = "productionOrderNum") String productionOrderNum);

  /**
   * 
   * <strong>Title : insertproductionControl<br></strong>
   * <strong>Description : </strong>保存<br> 
   * <strong>Create on : 2016-5-16 下午3:26:55<br></strong>
   * <p>
   * @param control
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertProductionControl(ProductionControl control);

  /**
   * 
   * <strong>Title : closeProductionControlByProductOrder<br></strong>
   * <strong>Description : </strong>产品订单关闭级联关闭sfc订单<br> 
   * <strong>Create on : 2016-5-16 下午5:01:29<br></strong>
   * <p>
   * @param ProductionControl
   * 
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void closeProductionControlByProductOrder(ProductionControl control);

  /**
   * 
   * <strong>Title : closeProductionControlByProductionOrder<br></strong>
   * <strong>Description : </strong>生产订单关闭级联关闭sfc订单<br> 
   * <strong>Create on : 2016-8-2 下午1:44:27<br></strong>
   * <p>
   * @param control
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void closeProductionControlByProductionOrder(ProductionControl control);

  /**
   * 
   * <strong>Title : selectRuningProductionControl<br></strong>
   * <strong>Description : </strong>查询状态不是未投产的sfc订单<br> 
   * <strong>Create on : 2016-5-16 下午6:01:01<br></strong>
   * <p>
   * @param site
   * @param productionOrderNum
   * @param statusstatus
   * @return
   * List<ProductionControl>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectRuningProductionControl(@Param(value = "siteCode") String siteCode,
      @Param(value = "productionOrderNum") String productionOrderNum, @Param(value = "status") String status);

  /**
   * 
   * <strong>Title : selectProductionControlCountByStatusSet<br></strong>
   * <strong>Description : </strong>查询生产订单下指定状态集合的生产管理号数量<br> 
   * <strong>Create on : 2016年5月17日 上午11:00:46<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param productionOrderNum 生产订单号
   * @param statusSet 状态集合
   * @return
   * int
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int selectProductionControlCountByStatusSet(@Param("siteCode") String siteCode,
      @Param("productionOrderNum") String productionOrderNum, @Param("statusSet") List<String> statusSet);

  /**
   * 
   * <strong>Title : insertProductionOperation<br></strong>
   * <strong>Description : </strong>新增生产确认点工序<br> 
   * <strong>Create on : 2016年5月17日 下午1:12:52<br></strong>
   * <p>
   * @param productionOperation
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertProductionOperation(ProductionOperation productionOperation);

  /**
   * 
   * <strong>Title : selectProductionControlsByOrderNum<br></strong>
   * <strong>Description : </strong>根据订单编号查询生产管理号列表<br> 
   * <strong>Create on : 2016年5月19日 上午10:33:14<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * List<ProductionControl>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlsByOrderNum(@Param("siteCode") String siteCode,
      @Param("productionOrderNum") String productionOrderNum);

  /**
   * 
   * <strong>Title : selectProductionControlStatusByCondition<br></strong>
   * <strong>Description : </strong>生产管理号执行状态分析查询<br> 
   * <strong>Create on : 2016-5-20 上午9:23:47<br></strong>
   * <p>
   * @param condition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlStatusByCondition(ProductionControlStatesCondition condition);

  /**
   * 
   * <strong>Title : selectProductionControlStatusCountBycondition<br></strong>
   * <strong>Description : </strong>生产管理号执行状态分析查询行数<br> 
   * <strong>Create on : 2016-5-20 下午3:25:03<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectProductionControlStatusCountBycondition(ProductionControlStatesCondition condition);

  /**
   * 
   * <strong>Title : selectOrderListForDefectGraph<br></strong>
   * <strong>Description : </strong>检验缺陷图形化查询生产管理号详细列表<br> 
   * <strong>Create on : 2016年5月27日 下午1:45:25<br></strong>
   * <p>
   * @param productionControlCondition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionControl> selectProductionControlListForDefectGraph(
      ProductionControlCondition productionControlCondition);

  /**
   * 
   * <strong>Title : getProductionControlStatusByCondition<br></strong>
   * <strong>Description : </strong>生产管理号执行状态分析查询<br> 
   * <strong>Create on : 2016-7-28 上午10:03:23<br></strong>
   * <p>
   * @param condition
   * @return
   * Set<Map<String,Object>>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Set<Map<String, Object>> getProductionControlStatusByCondition(ProductionControlStatesCondition condition);

  /**
  * 
  * <strong>Title : getUncompletedCount<br></strong>
  * <strong>Description : </strong>获取逾期未完工状态<br> 
  * <strong>Create on : 2016-7-28 上午10:14:02<br></strong>
  * <p>
  * @param condition
  * @return
  * int
  * @throws 
  * @author JinQuan.Fu<br>
  * @version <strong>v1.0.0</strong><br>
  * <br>
  * <strong>修改历史:</strong><br>
  * 修改人 | 修改日期 | 修改描述<br>
  * -------------------------------------------<br>
  * <br>
  * <br>
  */
  int getUncompletedCount(ProductionControlStatesCondition condition);

  /**
   * 
   * <strong>Title : getIssuedProductionOrder<br></strong>
   * <strong>Description : </strong>获取已经下达的生产订单编号<br> 
   * <strong>Create on : 2016年8月1日 下午2:09:24<br></strong>
   * <p>
   * @param siteCode
   * @param orderNums
   * @return
   * Set<String>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Set<String> getIssuedProductionOrder(@Param("siteCode") String siteCode, @Param("orderNums") String[] orderNums);

  /**
   * 
   * <strong>Title : getProductionControlsByControlNums<br></strong>
   * <strong>Description : </strong>获取生产管理号列表<br> 
   * <strong>Create on : 2016年8月1日 下午1:34:36<br></strong>
   * <p>
   * @param siteCode 工厂编号
   * @param orderNums 订单编号数组
   * @return
   * List<ProductionControl>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> getProductionControlsByControlNums(@Param("siteCode") String siteCode,
      @Param("controlNums") String[] controlNums);

  /**
   * 
   * <strong>Title : getVirtualProductionControl<br></strong>
   * <strong>Description : </strong>获取虚拟的订单管理号（生产订单附加部分信息）<br> 
   * <strong>Create on : 2016年8月1日 下午3:25:16<br></strong>
   * <p>
   * @param siteCode
   * @param orderNum
   * @return
   * ProductionControl
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionControl getVirtualProductionControl(@Param("siteCode") String siteCode, @Param("orderNum") String orderNum);

  /**
   * 
   * <strong>Title : selectCanClosedProductionControlByProductionOrder<br></strong>
   * <strong>Description : </strong>获取可以关闭的生产管理号<br> 
   * <strong>Create on : 2016-8-2 下午2:10:35<br></strong>
   * <p>
   * @param control
   * @return
   * List<ProductionControl>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectCanClosedProductionControlByProductionOrder(ProductionControl control);

  /**
   * 
   * <strong>Title : selectCanClosedProductionControlByProductOrder<br></strong>
   * <strong>Description : </strong>通过产品订单获取可以关闭的生产管理号<br> 
   * <strong>Create on : 2016-8-2 下午2:24:54<br></strong>
   * <p>
   * @param control
   * @return
   * List<ProductionControl>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectCanClosedProductionControlByProductOrder(ProductionControl control);

  /**
   * 
   * <strong>Title : getCreatedControlsByCondition<br></strong>
   * <strong>Description : </strong>获取新建状态的管理号列表<br> 
   * <strong>Create on : 2016年11月10日 下午2:03:04<br></strong>
   * <p>
   * @param condition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> getCreatedControlsByCondition(ProductionControlCondition condition);

  /**
   * 
   * <strong>Title : getCreatedControlsCountByCondition<br></strong>
   * <strong>Description : </strong>获取新建状态的管理号列表<br> 
   * <strong>Create on : 2016年11月10日 下午2:03:30<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getCreatedControlsCountByCondition(ProductionControlCondition condition);

}
